package com.jasperframework.boot.common.utils;

import java.text.DecimalFormat;

/**
  * <p> 单位换算工具类  </p>
  *
  * @site https://miliqkdoc.motopa.cn/
  * @author daizhao
  * @date 2022/12/12 12:12
  */
public class UnitFormatUtil {

    /**
     * 单位转换
     *
     * @param byteNumber number
     * @return desc
     */
    public static String formatByte(long byteNumber) {
        //换算单位
        double FORMAT = 1024.0;
        double kbNumber = byteNumber / FORMAT;
        if (kbNumber < FORMAT) {
            return new DecimalFormat("#.##KB").format(kbNumber);
        }
        double mbNumber = kbNumber / FORMAT;
        if (mbNumber < FORMAT) {
            return new DecimalFormat("#.##MB").format(mbNumber);
        }
        double gbNumber = mbNumber / FORMAT;
        if (gbNumber < FORMAT) {
            return new DecimalFormat("#.##GB").format(gbNumber);
        }
        double tbNumber = gbNumber / FORMAT;
        return new DecimalFormat("#.##TB").format(tbNumber);
    }

    /**
     * 单位转换
     *
     * @param byteNumber number
     * @return desc
     */
    public static String formatByteByUnit(long byteNumber, String unit) {
        //换算单位
        double FORMAT = 1024.0;
        double kbNumber = byteNumber / FORMAT;
        if (kbNumber < FORMAT || unit.equals("KB")) {
            return new DecimalFormat("#.##KB").format(kbNumber);
        }
        double mbNumber = kbNumber / FORMAT;
        if (mbNumber < FORMAT || unit.equals("MB")) {
            return new DecimalFormat("#.##MB").format(mbNumber);
        }
        double gbNumber = mbNumber / FORMAT;
        if (gbNumber < FORMAT || unit.equals("GB")) {
            return new DecimalFormat("#.##GB").format(gbNumber);
        }
        double tbNumber = gbNumber / FORMAT;
        return new DecimalFormat("#.##TB").format(tbNumber);
    }

    /**
     * 单位转换Mb
     *
     * @param byteNumber number
     * @return desc
     */
    public static double formatByteToMb(long byteNumber) {
        try {
            //换算单位
            double FORMAT = 1024.0;
            double kbNumber = byteNumber / FORMAT;
            double mbNumber = kbNumber / FORMAT;
            return DecimalCalculateUtils.round(mbNumber, 2);
        } catch (Exception e) {
            return 0;
        }
    }
}
